package com.googlecode.allinclusive.fw.dict;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.googlecode.allinclusive.fw.core.message.MessageUtils;

public class DefaultDictManager implements DictManager {

	/* 数据缓存Map*/
	protected Map<String, List<DictValue>> cacheMap;
	
	/* 数据字典信息加载处理对象 */
	private DictLoader loader;
	
	/**
	 * 获取给定类型代码的数据字典信息
	 * @param dictTypeCode 类型代码
	 * @return 数据字典信息
	 */
	@Override
	public List<DictValue> getDictValueList(String dictTypeCode) {
		assert (dictTypeCode != null);
		
		// 数据字典缓存对象 = NULL, 加载数据字典信息
		if (cacheMap == null) {
			cacheMap = loader.load();
		}
		
		// 获取给定类型代码的数据字典信息
		List<DictValue> dictValueList = cacheMap.get(dictTypeCode);
		if (dictValueList == null || dictValueList.isEmpty()) {
//			throw new DictException("不存在该类型代码的数据字典信息， 请联系管理员！[类型代码=" + dictTypeCode + "]");
			throw new DictException(MessageUtils.getMessage("DICT.SE10001", dictTypeCode));
		}
		
		// FIXME 复制到新的List对象中
		List<DictValue> result = new ArrayList<DictValue>();
		result.addAll(dictValueList);
		
		return result;
	}

	/**
	 * 获取给定代码的数据字典信息
	 * @param dictTypeCode 类型代码
	 * @param dictCode 数据字典代码
	 * @return 数据字典信息
	 */
	@Override
	public DictValue getDictValue(String dictTypeCode, String dictCode) {
		assert (dictTypeCode != null);
		assert (dictCode != null);
		
		// 获取给定类型代码的数据字典信息
		List<DictValue> codeList = getDictValueList(dictTypeCode);
		for (DictValue codeValue : codeList) {
			if (dictCode.equals(codeValue.getDictCode())) {
				return codeValue;
			}
		}
		
//		throw new DictException("不存在该代码的数据字典信息， 请联系管理员！[类型代码=" + dictTypeCode + "，数据字典代码=" + dictCode + "]");
		throw new DictException(MessageUtils.getMessage("DICT.SE10002", dictTypeCode, dictCode));
	}

	/*
	 * 数据字典信息加载处理对象
	 */
	public DictLoader getLoader() {
		return loader;
	}

	/*
	 * 数据字典信息加载处理对象
	 */
	public void setLoader(DictLoader loader) {
		this.loader = loader;
	}
}
